package com.iplant.base.utils.annotation.po;

import com.iplant.base.po.enums.DBCutTableModes;
import com.iplant.base.po.enums.DBEnumType;
import com.iplant.base.po.enums.DBSchemas;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
 * @author xiuto
 */
@Inherited
@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface DBBasePO {

    /**
     * 是否有Code字段
     *
     * @return boolean
     */
    boolean Code() default true;

    /**
     * 若需要自动赋值，请协同设置CodePrefix，同时Code为True
     *
     * @return boolean
     */
    boolean CodeAuto() default false;

    /**
     * 编号前缀 可以使用时间戳{yyyy-MM-dd} 必须使用大括号包括
     *
     * @return String
     */
    String CodePrefix() default "";

    /**
     * 是否自动创建数据表
     *
     * @return boolean
     */
    boolean AutoCreateTable() default true;


    boolean AllowDeleteTable() default false;

    /**
     * 序列号长度
     *
     * @return int
     */
    int CodeNum() default 7;

    /**
     * 是否有Name字段
     *
     * @return boolean
     */
    boolean Name() default true;

    /**
     * 主键字段 默认ID  不支持联合主键
     *
     * @return String
     */
    String PrimaryKey() default "ID";

    /**
     * 是否有Active字段
     *
     * @return boolean
     */
    boolean Active() default true;

    /**
     * 数据重复检查
     * 默认用并行即Or 如：{“Code”,"Name"}
     * 需要多条件And在字符串内部用逗号隔开 如 “ParentID,Name”  {“Code”,"ParentID,Name"}
     *
     * @return String[]
     */
    String[] CheckName() default {};

    /**
     * 数据库表名
     *
     * @return String
     */
    String TableName();

    /**
     * 表别名 默认t
     *
     * @return String
     */
    String TableAsName() default "t";

    /**
     * 注解实体类唯一标签名称 可以使用注解类全名称  xx.xx.xx.class
     * 默认采用此实体类的全名称 如：com.iplant.base.po.BasePO
     *
     * @return String
     */
    String IndexName() default "";

    /**
     * 数据库类型
     *
     * @return DBEnumType
     */
    DBEnumType DBType() default DBEnumType.MySQL;

    /**
     * 数据库库名
     *
     * @return DBSchemas
     */
    DBSchemas Schemas() default DBSchemas.Basic;

    /**
     * 是否启用插入  默认ID为0 判断为插入
     *
     * @return boolean
     */
    boolean InsertEnable() default true;

    /**
     * 是否启用更新  默认通过ID更新数据
     *
     * @return boolean
     */
    boolean UpdateEnable() default true;

    /**
     * 表的备注
     *
     * @return String
     */
    String Comment() default "";


    String OrderBy() default "ID DESC";


    String[] IndexCol() default {};

    DBCutTableModes CutTableMode() default DBCutTableModes.Default;


    /**
     * 是否缓存
     */
    boolean Cache() default false;
}
